package com.fileupload.upload.strategy;

import java.io.File;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 归档策略工厂
 * 根据配置的archive类型创建对应的归档策略对象
 */
public class ArchiveStrategyFactory {
    
    private static final Logger logger = LoggerFactory.getLogger(ArchiveStrategyFactory.class);
    
    /**
     * 根据archive类型获取对应的归档策略
     * @param archive 归档类型 (date/path 或自定义目录名)
     * @return 归档策略对象
     */
    public static ArchiveStrategy getArchiveStrategy(String archive) {
        if (archive == null || archive.isEmpty()) {
            logger.warn("[归档策略工厂] archive配置为空，返回默认空策略");
            return new DefaultArchiveStrategy();
        }
        
        if ("date".equalsIgnoreCase(archive)) {
            logger.info("[归档策略工厂] 创建日期归档策略");
            return new DateArchiveStrategy();
        } else if ("path".equalsIgnoreCase(archive)) {
            logger.info("[归档策略工厂] 创建路径归档策略");
            return new PathArchiveStrategy();
        } else {
            // 对于其他值，使用自定义目录名策略
            logger.info("[归档策略工厂] 创建自定义目录归档策略: {}", archive);
            return new CustomArchiveStrategy(archive);
        }
    }
    
    /**
     * 默认归档策略
     * 不添加任何额外目录
     */
    private static class DefaultArchiveStrategy implements ArchiveStrategy {
        @Override
        public String buildArchivePath(String monitorDir, File file) {
            return "";
        }
    }
    
    /**
     * 自定义目录归档策略
     * 使用指定的目录名
     */
    private static class CustomArchiveStrategy implements ArchiveStrategy {
        private String customDir;
        
        public CustomArchiveStrategy(String customDir) {
            this.customDir = customDir;
        }
        
        @Override
        public String buildArchivePath(String monitorDir, File file) {
            logger.info("[自定义目录归档策略] 使用自定义目录: {}", customDir);
            return customDir + "/";
        }
    }
}